Mac App Store 支持


概述

您可以通过官方 Mac App Store 或商店外分发您的 macOS 应用程序。但是,应用程序在分发之前应始终进行签名。未签名的应用程序将被 Gatekeeper 拒绝启动。

本指南将向您展示如何为 macOS 签署基于 NW.js 的应用程序。

先决条件

  • 通过 iTunesConnect 创建 macOS 应用程序
  • Apple Developer 获取应用程序和安装程序证书。
    • 如果您通过 **Mac App Store** 分发应用程序
      • 第三方 Mac 开发者应用程序:Foo (XXXXXXXXXX)
      • 第三方 Mac 开发者安装程序:Foo (XXXXXXXXXX)
    • 如果您在 **商店外** 分发应用程序
      • 开发者 ID 应用程序:Foo (XXXXXXXXXX)
      • 开发者 ID 安装程序:Foo (XXXXXXXXXX)

构建应用程序

nwjs.io 下载 NW.js MAS 版本,并按照 打包和分发 中的说明构建您的应用。

签署应用程序

build_mas.py 用于为您的 macOS 应用签名。通过提供 --pkg 参数,该脚本可以生成可上传到 Mac App Store 的 .pkg 文件。

基本用法

python build_mas.py -C build.cfg -I myapp-dev.app -O MyApp.app

配置文件格式

配置文件 (build.cfg) 是一个人类可读的文本文件。它包含用于签名和打包应用程序的重要设置。

ApplicationIdentityInstallerIdentity 是用于签名和打包应用程序的证书名称。有关您需要的证书,请参阅 先决条件

NWTeamID 用于建立用于启动基于 NW.js 的应用程序的 IPC 通道。它可以从 Apple Developer -> Membership -> Team ID 中获取。

ParentEntitlementsChildEntitlements 应该是有效的 权利文件。默认情况下,您的应用程序使用以下最小权限进行签名。

entitlements-parent.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>com.apple.security.app-sandbox</key>
  <true/>
  <key>com.apple.security.application-groups</key>
  <string>NWTeamID.your.app.bundle.id</string>
</dict>
</plist>

entitlements-child.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>com.apple.security.app-sandbox</key>
  <true/>
  <key>com.apple.security.inherit</key>
  <true/>
</dict>
</plist>

阅读示例 build.cfg 以了解所有字段的详细含义。